<?php
/*******************************************************************************

    FinalsClub.org is a platform for students and faculty to collaborate
    and share their knowledge with the world.

    Copyright (C) 2009  Andrew Magliozzi
 
    This file is a part of FinalsClub.org.

    FinalsClub.org is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
    To contact FinalsClub.org, send an email to info@finalsclub.org, or
    send mail to Finals Club, c/o Veritas Tutors, 1132 Massachusetts Avenue,
    Cambridge, MA 02138.

*******************************************************************************/

class GroupPeer extends BaseGroupPeer {
	
	const EVERYONE = 1;
	const UNIVERSITY = 2;
	const NONE = 3;
	
	const BASE_OBJECT_NAME = 'Group';
	
	public static $visibilityTypes = array(
		self::EVERYONE => 'Everyone',
		self::UNIVERSITY => 'My University',
		self::NONE => 'No one'
	);
	
	public static function retrieveNameAndNetworkId($name, $network_id) {
		$c = new Criteria();
		$c->add(GroupPeer::NAME, $name);
		$c->add(GroupPeer::NETWORK_ID, $network_id);
		return GroupPeer::doSelectOne($c);
	}
	
	public static function retrieveById($id) {
		return GroupPeer::retrieveByPK($id);
	}

	/**
	 * Retrieve all groups that a user is allowed to view for a given user id and optional network id
	 * @param $user_id
	 * @param $network_id
	 * @return unknown_type
	 */
	public static function retrieveAll($user_id, $network_id = null, $is_admin = false) {
		$c = new Criteria();
		
		if(!$is_admin) {
			if($network_id) {
				$c->add(GroupPeer::NETWORK_ID, $network_id);
			}
			
			$cton1 = $c->getNewCriterion(GroupMemberPeer::USER_ID, $user_id);
			$cton2 = $c->getNewCriterion(GroupPeer::VISIBILITY, GroupPeer::NONE, Criteria::NOT_EQUAL);
			// combine the criteria
			$cton1->addOr($cton2);
			
			// add to the criteria
			$c->add($cton1);
			$c->addJoin(GroupPeer::ID, GroupMemberPeer::GROUP_ID);
			
			$c->addDescendingOrderByColumn(GroupPeer::ID);
			$c->addGroupByColumn(GroupPeer::ID);				
		}
		
		return GroupPeer::doSelect($c); 
	}
	
	public static function retrieveAllPublic($limit = null) {
		$c = new Criteria();
		if($limit) {
			$c->setLimit($limit);
		}
		$c->add(GroupPeer::VISIBILITY, GroupPeer::EVERYONE);
		return GroupPeer::doSelect($c);
	}

	public static function doDeleteAll($con = null)
	{
		if (file_exists($index = Search::getLuceneIndexFile(Search::GROUP))) {
    			sfToolkit::clearDirectory($index);
    			rmdir($index);
  		}
		return parent::doDeleteAll($con);
	}
	
	
}
